"use strict";
// 定义汽车类，属性：name，方法：speed(),返回number，固定返回1，定义构造方法，传入name构造汽车
//    定义跑车类，继承汽车类，重写speed()方法，要求返回2倍父类的速度做为结果，定义构造方法，调用父类构造方法，传入固定值“跑车”构造。
//    定义货车类，继承汽车类，重写speed()方法，要求返回0.5倍父类的速度做为结果，定义构造方法，调用父类构造方法，传入固定值“卡车”构造。
class Car {
    constructor(name) {
        this.name = name;
    }
    speed() {
        return 1;
    }
}
class SportsCar extends Car {
    constructor() {
        super("跑车");
    }
    speed() {
        return 2 * super.speed();
    }
}
class Truck extends Car {
    constructor() {
        super("卡车");
    }
    speed() {
        return 0.5 * super.speed();
    }
}
// 定义驾驶员类，属性：name，方法：drive(),返回number，固定返回1，定义构造方法，传入name构造驾驶员
//   定义赛车手类，继承驾驶员类，重写drive()方法，要求返回1.5倍父类的drive()值做为结果，定义构造方法，调用父类构造方法，传入固定值“赛车手”构造。
class Driver {
    constructor(name) {
        this.name = name;
    }
    drive() {
        return 1;
    }
}
class Racer extends Driver {
    constructor() {
        super("赛车手");
    }
    drive() {
        return 2 * super.drive();
    }
}
// 编写一个方法run()，返回数值类型，传入两个参数：驾驶员和汽车，返回行驶100距离的时间结果。
//  run()方法打印：我是XXX（驾驶员|赛车手），我驾驶XXX（汽车|跑车|卡车），我花费XXX时长开完100距离
//  分别创建普通汽车、跑车、货车、普通驾驶员、赛车手。两两组合调用上面的run()方法
function run(driver, car) {
    let cast = 100 / (driver.drive() * car.speed());
    console.log(`我是${driver.name}，我驾驶${car.name}，我花费${cast}时长开完100距离`);
    return cast;
}
let d1 = new Driver("普通驾驶员");
let d2 = new Racer();
let c1 = new Car("普通汽车");
let c2 = new SportsCar();
let c3 = new Truck();
run(d1, c1);
run(d1, c2);
run(d1, c3);
run(d2, c1);
run(d2, c2);
run(d2, c3);
